home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / YICN23.ZIP / BEET / PLATFORM.CPP next >
C/C++ Source or Header  |  1993-02-28  |  3KB  |  110 lines

  1. #include "platform.h"
  2.  
  3. player * firstPlayer = NULL, *secondPlayer = NULL;
  4.  
  5. void platformBeast::go(command myCommand)
  6. {
  7.   switch(myCommand)
  8.   {
  9.   case goLeft : xMomentum = -moveIncrement; break;
  10.   case goRight: xMomentum = moveIncrement; break;
  11.   case jump   : yMomentum = ((mymap->mapData[mapX][mapY].myTerrainType == 1) && (squareY == FLOORHEIGHT)) ?
  12.                   -jumpIncrement : yMomentum; break;
  13.   }
  14. }
  15.  
  16. void platformBeast::advance(void)
  17. {
  18.   if ((mymap->mapData[mapX][mapY].myTerrainType == 1)
  19.      && (squareY + yMomentum >= FLOORHEIGHT))
  20.   {
  21.     remove();                   //so you can't go through floors
  22.     squareY = FLOORHEIGHT;
  23.     yMomentum = 0;
  24.     put(mapX, mapY);
  25.   }
  26.   else
  27.     yMomentum+= gravity;
  28.   if (xMomentum || yMomentum)
  29.     addCommand(scriptNode::fineMoveRel,0,0,xMomentum, yMomentum);
  30.   else
  31.   {
  32.     if ((direction == factor::northeast) || (direction == factor::southeast))
  33.       turn(factor::east);
  34.     if ((direction == factor::northwest) || (direction == factor::southwest))
  35.       turn(factor::west);
  36.     addCommand(scriptNode::doNothing,0,0,0,0);
  37.   }
  38.   factor::advance();
  39.   if (alignment < 0)
  40.   {
  41.     int hitMissile = 0;
  42.     if (hit(firstPlayer))
  43.       firstPlayer -> hitPoints -= damage;
  44.     if (hitMissile = firstPlayer->hitWithMissile(this))
  45.       hitPoints -= firstPlayer->myMissiles[hitMissile-1]->damage;
  46.   }
  47.   if (hitPoints <= 0)
  48.     die();
  49. }
  50.  
  51. void platformBeast::die(void)
  52. {
  53.   remove();
  54. }
  55.  
  56. void missile::advance()
  57. {
  58.   platformBeast::advance();
  59.   --range;
  60.   if (range == 0)
  61.   {
  62.     remove();
  63.     if (owningPlayer)
  64.       owningPlayer->myMissiles[missileNumber] = NULL;
  65.     delete this;
  66.   }
  67. }
  68.  
  69. void player::fireMissile(void)
  70. {
  71.   for (int missileCounter = 0; (myMissiles[missileCounter] != NULL) && (missileCounter < numMissiles); ++missileCounter);
  72.   if (missileCounter == numMissiles)
  73.     return;
  74.   myMissiles[missileCounter] = missileGenerator(missileType);
  75.   missile * newMissile = myMissiles[missileCounter];
  76.   newMissile->direction = direction;
  77.   newMissile->missileNumber = missileCounter;
  78.   newMissile->mymap = mymap;
  79.   switch (direction)
  80.   {
  81.     case factor::east:
  82.     case factor::southeast:
  83.     case factor::northeast: newMissile->xMomentum = moveIncrement; break;
  84.     case factor::west:
  85.     case factor::southwest:
  86.     case factor::northwest: newMissile->xMomentum = -moveIncrement; break;
  87.   }
  88.   newMissile->squareX = squareX;
  89.   newMissile->squareY = squareY;
  90.   newMissile->put(mapX, mapY);
  91. }
  92.  
  93. int player::hitWithMissile(platformBeast * target)
  94. {
  95.   for (int missileCounter = 0; missileCounter < numMissiles; ++missileCounter)
  96.     if (myMissiles[missileCounter])
  97.       if (myMissiles[missileCounter]->hit(target))
  98.         return missileCounter + 1;  //so zero is "no hit"
  99.   return 0;
  100. }
  101.  
  102. void crawler::advance(void)
  103. {
  104.   if (!(targetTerrain() & FLOOR))
  105.     direction = ((direction == factor::east) ? factor::west : factor::east);
  106.   go((direction == factor::east) ? platformBeast::goRight : platformBeast::goLeft);
  107.   platformBeast::advance();
  108. }
  109.  
  110.